﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAO
{
    public class PessoaDAO
    {
        #region Leitores
        public static Pessoa Selecionar(int eventoID, int id)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var obj = bco.Pessoas.FirstOrDefault(e => e.eventoID == eventoID && e.ID == id);
                if (obj == null) { throw new Exception("Pessoa não encontrada!"); }
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("Selecionar() - " + ex.Message.ToString());
            }
        }

        public static Pessoa Selecionar(int eventoID, string email)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var obj = bco.Pessoas.FirstOrDefault(e => e.eventoID == eventoID && e.email == email);
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception("Selecionar() - " + ex.Message.ToString());
            }
        }

        public static List<Pessoa> Listar(int eventoID)
        {
            PersistenciaContainer bco = new PersistenciaContainer();
            List<Pessoa> objs = (from a in bco.Pessoas where a.eventoID == eventoID select a).ToList();
            return objs;
        }
        public static List<Pessoa> Listar(int eventoID, int papelID, int id, string nomeOuEmail)
        {
            PersistenciaContainer bco = new PersistenciaContainer();
            List<Pessoa> objs = (from a in bco.Pessoas where a.eventoID == eventoID select a).ToList();

            if (id != 0)
            {
                objs = objs.FindAll(g => g.ID == id).ToList();
            }

            if (papelID != 0)
            {
                objs = objs.FindAll(g => g.papelID == papelID).ToList();
            }

            if (!string.IsNullOrEmpty(nomeOuEmail))
            {
                objs = objs.FindAll(g => g.nomeCompleto.ToLower().Contains(nomeOuEmail.ToLower().Trim()) || g.email.ToLower().Contains(nomeOuEmail.ToLower().Trim())).ToList();
            }

            return objs;
        }

        public static Pessoa fazLogin(int eventoID, string email, string senha)
        {
            try
            {
                var bco = new PersistenciaContainer();
                var obj = bco.Pessoas.FirstOrDefault(e => e.eventoID == eventoID && e.email == email && e.senha == senha);
                if (obj == null) { throw new Exception("Dados incorretos. E-mail ou Senha não conferem."); }
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message.ToString());
            }
        }
        #endregion

        #region Modificadores
        public static void Salvar(Pessoa objNovo)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();
                if (objNovo.ID == 0)
                {
                    bco.Pessoas.AddObject(objNovo);
                    bco.SaveChanges();
                }

                else
                {
                    Pessoa objOLD = bco.Pessoas.FirstOrDefault(e => e.eventoID == objNovo.eventoID && e.ID == objNovo.ID);

                    if (objOLD != null)
                    {
                        objOLD.nomeCompleto = objNovo.nomeCompleto;
                        objOLD.email = objNovo.email;
                        objOLD.cpf = objNovo.cpf;
                        objOLD.telefone = objNovo.telefone;
                        objOLD.dtNascimento = objOLD.dtNascimento;

                        bco.SaveChanges();
                    }
                    else
                        throw new Exception("Pessoa não localizada!");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        public static void Deletar(int eventoID, int id)
        {
            try
            {
                PersistenciaContainer bco = new PersistenciaContainer();

                Pessoa obj = bco.Pessoas.FirstOrDefault(g => g.eventoID == eventoID && g.ID == id);

                bco.Pessoas.DeleteObject(obj);
                bco.SaveChanges();
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion

        #region Validadores
        #endregion
    }
}
